'''
Python 中常用的运算符
- 算术运算符
- 比较（关系）运算符
- 赋值运算符
- 逻辑运算符
- 成员运算符
- 身份运算符
'''

'''
算术运算符
'''

a = 9
b = 2
print('a + b = ', a + b)                                # 输出值：11
print('a - b = ', a - b)                                # 输出值：7
print('a * b = ', a * b)                                # 输出值：18
print('a / b = ', a / b)                                # 除，输出值：4.5
print('a // b =', a // b)                               # 整除（返回商的整数部分）9 除以 2 等于 4.5，取整数部分，输出值：4
print('a % b = ', a % b)                                # 取模（求余）， 9 除以 2 等于 4 余 1 。输出值：1
print('b / a = ', b / a)                                # 除，输出值：0.2222222222222222
print('b // a =', b // a)                               # 整除（返回商的整数部分）2 除以 9 等于 0.2222222222222222，取整数部分，输出值：0
print('b % a = ', b % a)                                # 取模（求余）， 2 除以 9 等于 0 余 2 。输出值：2
print('a**b = ', a**b)                                  # 幂，a 的 b 次幂（9 的 2 次方），输出值：81
print('b**a = ', b**a)                                  # 幂，b 的 a 次幂（2 的 9 次方），输出值：512


'''
比较运算符
所有比较运算符返回 1 表示真，返回 0 表示假，这分别与特殊变量 True 和 False 等价
'''

a = 10
b = 20
print(a == b)                                           # 等于，比较对象是否相等，输出值： False
print(a != b)                                           # 不等于，比较两个对象是否不相等，输出值：True
print(a > b)                                            # 大于，比较前一个数是否大于后一个数，输出值：False
print(a < b)                                            # 小于，比较前一个数是否小于后一个数，输出值：True
print(a >= b)                                           # 大于等于，比较前一个数是否大于等于后一个数，输出值：False
print(a <= b)                                           # 小于等于，比较前一个数是否小于等于后一个数，输出值：True


'''
赋值运算符
'''

a = 10
b = 20
c = a + b
print('c =', c)                                         # 输出值：30
# 加法赋值运算符
c += a
print('c =', c)                                         # c += a 等效于 c = c + a 输出值：40
# 减法赋值运算符
c -= a
print('c =', c)                                         # c -= a 等效于 c = c - a 输出值：30
# 乘法赋值运算符
c *= a
print('c =', c)                                         # c *= a 等效于 c = c * a 输出值：300
# 除法赋值运算符
c /= a
print('c =', c)                                         # c /= a 等效于 c = c / a 输出值：30.0
# 取模(求余)赋值运算符
c = 35                                                  # 重置 c 的值用于下面的运算
c %= a
print('c =', c)                                         # c %= a 等效于 c = c % a 输出值：5
# 幂赋值运算符
c = 5
a = 3
c **= a
print('c =', c)                                         # c **= a 等效于 c = c ** a 输出值：125
# 取整除赋值运算符
c = 35
a = 10
c //= a
print('c =', c)                                         # c //= a 等效于 c = c // a 输出值：3


'''
位运算符
'''

a = 60                                                  # a = 60 的二进制是 0011 1100
b = 13                                                  # b = 13 的二进制是 0000 1101
# &: 按位与运算符：参与运算的两个值，如果两个相应位都为 1 ，则该位的结果为 1 ，否则为 0
print('a&b =', a&b)                                     # a&b 的二进制结果是 0000 1100 ，对应的十进制数是 12，所以输出值为 12
# |: 按位或运算符：只要对应的二个二进位有一个为 1 时，结果位就为 1
print('a|b =', a|b)                                     # a|b 的二进制结果是 0011 1101 ，对应的十进制数是 61，所以输出值为 61
# ^: 按位异或运算符：当两相应的二进位相异时，结果为 1
print('a^b = ', a^b)                                    # a^b 的二进制结果是：0011 0001，对应的十进制是 49， 所以输出值为 49
# ~: 按位取反运算符：对数据的每个二进制位取反，即把 1 变为 0 ，把 0 变为 1 。 ~x 类似于 -x-1
print('~a =', ~a)                                       # a^b 的二进制结果是：1100 0011，对应的十进制是 -61， 所以输出值为 -61
# <<: 左移动运算符，运算数的各二进位全部向左移动若干位，由 << 右边的数字指定了移动的位数，高位丢弃，低位补 0
print('a<<2 = ', a<<2)                                  # a << 2 的二进制结果是：1111 0000 ，对应的十进制是 240，所以输出值为 240
# >>: 右移动运算符，运算数的各二进位全部向右移动若干位，由 >> 右边的数字指定了移动的位数
print('a>>2 = ', a>>2)                                  # a >> 2 的二进制结果是：0000 1111 ，对应的十进制是 15，所以输出值为 15


'''
逻辑运算符
'''

a = 10
b = 20
# and: 布尔‘与’，如果 a 为 False (0, '', [])等 , a and b 返回 a (False ,0, '', [] 等) ，否则返回 b 的计算值
print('(a and b) = ', (a and b))                        # 输出值：20
# or: 布尔‘或’，如果 a 是非 0，返回 a 的值，否则返回 b 的计算值
print('(a or b) = ', (a or b))                          # 输出值：10
# not: 布尔‘非’，如果 a 为 True，返回 False，如果 a 为 False，则返回 True
print('not(a and b) = ', not(a and b))


'''
成员运算符
'''

users = ['Lily', 'Lucy', 'Jack']
lily = 'Lily'
bill = 'Bill'
# in: 如果指定的成员在指定的序列中找到值返回 True，否则返回 False
print(lily in users)                                    # 元素 Lily 存在 list 中，所以返回值为：True
print(bill in users)                                    # 元素 Bill 不存在 list 中，所以返回值为：False
# not in: 如果指定的成员在指定的序列中没有找到值返回 True，否则返回 False
print(lily not in users)                                # 元素 Lily 存在 list 中，所以返回值为：False
print(bill not in users)                                # 元素 Bill 不存在 list 中，所以返回值为：True


'''
身份运算符
'''
# is：判断两个标识符是否引用自同一个对象，如果是返回 True ，否则返回 False，例如： x is y ,类似于 id(x) == id(y)
# is not：判断两个标识符是否引用自不同对象，如果是返回 True ，否则返回 False，例如： x is not y ,类似于 id(x) != id(y)


